package us.proyecto.canarios.dao;

import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;

import us.proyecto.canarios.domain.Asociacion;
import us.proyecto.canarios.domain.Concurso;
import us.proyecto.canarios.domain.Criador;
import us.proyecto.canarios.domain.Juez;
import us.proyecto.canarios.domain.Usuario;

@Name("usuarioDAO")
@Scope(ScopeType.SESSION)
public class UsuarioDAO {

    @In
    EntityManager em;

    public UsuarioDAO() {

    }

    @Begin(join = true, flushMode = FlushModeType.MANUAL)
    public List<Usuario> getList() {
        return em.createQuery("from Usuario").getResultList();
    }

    @Begin(join = true, flushMode = FlushModeType.MANUAL)
    public List<Usuario> getListbywhere(String where) {
        return em.createQuery("from Usuario where "+ where).getResultList();
    }

    public List<Criador> getListCriadores(String where){
    	return em.createQuery("from Criador c where "+ where).getResultList();
    }
    public List<Criador> getListJueces(String where){
    	return em.createQuery("from Juez j where "+ where).getResultList();
    }

    @Begin(join = true, flushMode = FlushModeType.MANUAL)
    public boolean delete(Usuario usu) {
        boolean correcto;

        try {
            Usuario objDel= em.getReference(Usuario.class, usu.getIdUsuario());
            em.remove(objDel);
            em.flush();
            correcto = true;
        } catch (RuntimeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            correcto = false;
        }
        return correcto;

    }
    @Begin(join = true, flushMode = FlushModeType.MANUAL)
    public boolean save(Usuario usu) {
        boolean correcto;

        try {
            em.persist(usu);
            em.flush();
            correcto = true;
        } catch (RuntimeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            correcto = false;
        }
        return correcto;

    }

    public List<Juez> getJueces(){
    	return em.createQuery("from Juez j where j.usuario.pendiente = false").getResultList();
    }

    public List<Asociacion> getAsociaciones(){
    	return em.createQuery("from Asociacion a where a.usuario.pendiente = false").getResultList();
    }

    public List<Asociacion> getAsociacionesByWhere(String s){
    	return em.createQuery("from Asociacion a where a.usuario.pendiente = false and " + s).getResultList();
    }

    public List<Criador> getCriadores(){
    	return em.createQuery("from Criador c where c.usuario.pendiente = false").getResultList();
    }

    public Juez getJuez(Juez juez){
    	juez = em.merge(juez);
    	return juez;
    }

    public Criador getCriador(Criador juez){
    	juez = em.merge(juez);
    	return juez;
    }

    public List<Concurso> getlistaConcursos(Criador c){
    	List<Concurso> listaRes = em.createQuery("select distinct p.concurso from Puntuacion p where p.pajaro.criador =" + c.getIdCriador()).getResultList();
    	return listaRes;
    }
}
